/*
multiboot.c
多重引导文件
参考多重引导规范中的示例代码，但大部分代码都是xinix的
这段代码仅适用于ELF格式的可执行文件，如果是其它体系，可能没有办法正确运行
为了使多重引导头部出现在规定的范围内，头部信息放置在了.text代码段，并且链接器链接时需要把multiboot.c链接到ELF的开关位置
如果想了解更多关于多重引导的东西，可以直接下载多重引导规范参考
Copyright (c) 2018 by Loganx.
*/

#include"multiboot.h"
#include"../drive/console.h"

__attribute__((section(".text"))) MultibootHeader mbh = {
    .magic = MULTIBOOT_HEADER_MAGIC,
    .flags = MULTIBOOT_HEADER_FLAGS,
    .checksum = -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)
};

unsigned long magic;
pMbI pmbi;

void BootVerify(void)
{
    ConsoleInitialize();

    if(magic != MULTIBOOT_BOOTLOADER_MAGIC){
        //如果魔法数不对还能走下去，那就打印一段错误代码吧！
        PrintLogo();
        ConsoleGotoNexty();
        ConsolePutChar('O');
    }
    else{
        //OK，打印LOGO并调用系统内核
        PrintLogo();
        ConsoleGotoNexty();
        ConsolePutChar('X');
    }

    //怎么感觉哪个函数都不需要返回？
    while(1);
}
